package com.duoec.dw.lineage.service;

import com.alibaba.druid.sql.ast.SQLStatement;
import com.duoec.dw.lineage.dto.DdlChangeDto;

/**
 * @author xuwenzhen
 */
public interface StatementAnalyser<T extends SQLStatement, D> {
    /**
     * 获取当前分析器分析的statement类型
     *
     * @return statement类型
     */
    Class<T> getType();

    /**
     * 解析语句
     *
     * @param statement SQL语句
     * @return 返回值
     */
    D analyse(T statement);

    /**
     * 处理解析结果
     *
     * @param dto    DdlChangeDto实例
     * @param result 语句的处理结果
     */
    void setResult(DdlChangeDto dto, D result);
}
